Changed testcellarea
authorTristan Van Berkom <tristan.van.berkom@gmail.com>
Tue, 9 Nov 2010 05:09:47 +0000 (14:09 +0900)
committerTristan Van Berkom <tristan.van.berkom@gmail.com>
Tue, 9 Nov 2010 05:09:47 +0000 (14:09 +0900)
Changed testcellarea to watch the iter for size changes and queue resizes
instead of explicitly queueing resizes when controls change.

tests/cellareascaffold.c
tests/testcellarea.c

index 4805a2832df29ce62f7b98ca0ed2b661965b5440..0da496d6eeef3cc2500e7eac760d1f131ae657a7 100644 (file)
@@ -73,6 +73,8 @@ struct _CellAreaScaffoldPrivate {
 
   /* Cache some info about rows (hieghts etc) */
   GArray          *row_data;
+
+  gulong           size_changed_id;
 };
 
 
@@ -87,6 +89,18 @@ G_DEFINE_TYPE_WITH_CODE (CellAreaScaffold, cell_area_scaffold, GTK_TYPE_WIDGET,
                         G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE, NULL));
 
 
+static void
+size_changed_cb (GtkCellAreaIter  *iter,
+                GParamSpec       *pspec,
+                CellAreaScaffold *scaffold)
+{
+  if (!strcmp (pspec->name, "minimum-width") ||
+      !strcmp (pspec->name, "natural-width") ||
+      !strcmp (pspec->name, "minimum-height") ||
+      !strcmp (pspec->name, "natural-height"))
+    gtk_widget_queue_resize (GTK_WIDGET (scaffold));
+}
+
 static void
 cell_area_scaffold_init (CellAreaScaffold *scaffold)
 {
@@ -100,6 +114,10 @@ cell_area_scaffold_init (CellAreaScaffold *scaffold)
   priv->area = gtk_cell_area_box_new ();
   priv->iter = gtk_cell_area_create_iter (priv->area);
 
+  priv->size_changed_id = 
+    g_signal_connect (priv->iter, "notify",
+                     G_CALLBACK (size_changed_cb), scaffold);
+
   priv->row_data = g_array_new (FALSE, FALSE, sizeof (RowData));
 
   gtk_widget_set_has_window (GTK_WIDGET (scaffold), FALSE);
@@ -158,8 +176,12 @@ cell_area_scaffold_dispose (GObject *object)
 
   if (priv->iter)
     {
+      /* Disconnect signals */
+      g_signal_handler_disconnect (priv->iter, priv->size_changed_id);
+
       g_object_unref (priv->iter);
       priv->iter = NULL;
+      priv->size_changed_id = 0;
     }
 
   if (priv->area)
@@ -187,7 +209,6 @@ cell_area_scaffold_set_property (GObject      *object,
     case PROP_ORIENTATION:
       gtk_orientable_set_orientation (GTK_ORIENTABLE (priv->area), 
                                      g_value_get_enum (value));
-      gtk_widget_queue_resize (GTK_WIDGET (scaffold));
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -294,6 +315,8 @@ request_all_base (CellAreaScaffold *scaffold)
   if (!priv->model)
     return;
 
+  g_signal_handler_block (priv->iter, priv->size_changed_id);
+
   orientation = gtk_orientable_get_orientation (GTK_ORIENTABLE (priv->area));
 
   valid = gtk_tree_model_get_iter_first (priv->model, &iter);
@@ -315,6 +338,8 @@ request_all_base (CellAreaScaffold *scaffold)
     gtk_cell_area_iter_sum_preferred_width (priv->iter);
   else
     gtk_cell_area_iter_sum_preferred_height (priv->iter);
+
+  g_signal_handler_unblock (priv->iter, priv->size_changed_id);
 }
 
 static void 
@@ -606,8 +631,6 @@ cell_area_scaffold_set_model (CellAreaScaffold *scaffold,
        }
 
       gtk_cell_area_iter_flush (priv->iter);
-
-      gtk_widget_queue_resize (GTK_WIDGET (scaffold));
     }
 }
 
index 379ff398378701e510a34ec981f4afd556041dc9..015be304fa7aa6baeb6359f139c851d77b97265a 100644 (file)
@@ -115,7 +115,6 @@ align_cell_2_toggled (GtkToggleButton  *toggle,
   gboolean     align = gtk_toggle_button_get_active (toggle);
 
   gtk_cell_area_cell_set (area, cell_2, "align", align, NULL);
-  gtk_widget_queue_resize (GTK_WIDGET (scaffold));
 }
 
 static void
@@ -126,7 +125,6 @@ align_cell_3_toggled (GtkToggleButton  *toggle,
   gboolean     align = gtk_toggle_button_get_active (toggle);
 
   gtk_cell_area_cell_set (area, cell_3, "align", align, NULL);
-  gtk_widget_queue_resize (GTK_WIDGET (scaffold));
 }
 
 static void
@@ -137,7 +135,6 @@ expand_cell_1_toggled (GtkToggleButton  *toggle,
   gboolean     expand = gtk_toggle_button_get_active (toggle);
 
   gtk_cell_area_cell_set (area, cell_1, "expand", expand, NULL);
-  gtk_widget_queue_resize (GTK_WIDGET (scaffold));
 }
 
 static void
@@ -148,7 +145,6 @@ expand_cell_2_toggled (GtkToggleButton  *toggle,
   gboolean     expand = gtk_toggle_button_get_active (toggle);
 
   gtk_cell_area_cell_set (area, cell_2, "expand", expand, NULL);
-  gtk_widget_queue_resize (GTK_WIDGET (scaffold));
 }
 
 static void
@@ -159,7 +155,6 @@ expand_cell_3_toggled (GtkToggleButton  *toggle,
   gboolean     expand = gtk_toggle_button_get_active (toggle);
 
   gtk_cell_area_cell_set (area, cell_3, "expand", expand, NULL);
-  gtk_widget_queue_resize (GTK_WIDGET (scaffold));
 }
 
 static void